package com.yt.sys.models.dto;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.yt.common.dto.BaseDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
@TableName("employee_info")
@ApiModel(value="员工信息对象", description="员工信息对象")
public class EmployeeInfoDTO extends BaseDTO implements Serializable {

    /**
     * 员工ID（主键），使用String类型以支持varchar类型的员工ID（如E001）
     */
    @TableId(value = "id")
    @ApiModelProperty(value = "员工ID（主键）")
    private String employeeId;

    @ApiModelProperty(value = "员工姓名")
    private String name;
    @ApiModelProperty(value = "性别（男/女/其他）")
    private String gender;
    @ApiModelProperty(value = "员工手机号")
    private String phone;
    @ApiModelProperty(value = "员工邮箱")
    private String email;
    @ApiModelProperty(value = "员工住址")
    private String address;
    @ApiModelProperty(value = "员工状态（0-离职/禁用，1-在职/正常）")
    private Integer status;
    
    /**
     * 排除父类中的revision字段映射，因为employee_info表中无此字段
     */
    @TableField(exist = false)
    private Integer revision;
    
    /**
     * Getter方法，返回String类型的员工ID
     * @return 员工ID
     */
    public String getEmployeeId() {
        return employeeId;
    }
    
    /**
     * Setter方法，设置String类型的员工ID
     * @param employeeId 员工ID
     */
    public void setEmployeeId(String employeeId) {
        this.employeeId = employeeId;
    }
    
    /**
     * 覆盖父类getId方法，返回employeeId的值（转换为Long）
     * 注意：如果employeeId包含非数字字符，将返回null
     * @return 员工ID（Long类型）
     */
    @Override
    @JSONField(serialize = true)
    public Long getId() {
        if (employeeId == null) {
            return null;
        }
        try {
            return Long.valueOf(employeeId);
        } catch (NumberFormatException e) {
            // 如果employeeId不是纯数字格式，返回null
            return null;
        }
    }
    
    /**
     * 覆盖父类setId方法，将Long类型的ID转换为String类型存储到employeeId中
     * @param id ID值
     */
    @Override
    public void setId(Long id) {
        this.employeeId = id != null ? String.valueOf(id) : null;
    }
}